package top.roadvast.springboot.design_pattern.singleton;

/**
 * @Author 郭泽鹏
 * @Date 2021/10/19 16:02
 * @Version 1.0
 * @Description
 * 懒汉式（线程安全，同步代码块）【不推荐用】
 * 由于第四种实现方式同步效率太低，所以摒弃同步方法，改为同步产生实例化的的代码块。
 * 但是这种同步并不能起到线程同步的作用。跟第3种实现方式遇到的情形一致，
 * 假如一个线程进入了if (singleton == null)判断语句块，还未来得及往下执行，
 * 另一个线程也通过了这个判断语句，这时便会产生多个实例。
 */
public class Singleton05 {
    private static Singleton05 instance;

    /**
     * 不允许外部类访问
     */
    private Singleton05() {
    }

    /**
     * 实例化对象的时候使用同步代码块
     * @return 本类实例
     */
    public Singleton05 getInstance() {
        if (instance == null) {
            synchronized (Singleton05.class) {
                instance = new Singleton05();
            }
        }
        return instance;
    }
}
